package qq

import (
	"github.com/crozz-net/gopenapi/qq/model/user"
	"github.com/crozz-net/gopenapi/request"
	"net/url"
)

type api_user struct {
	client_id string
}

/**
 * 获取腾讯微博登录用户的用户资料。
 * 使用 {@link T} 中的client_id
 * 文档地址：http://wiki.connect.qq.com/get_info
 *
 * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid       用户的ID，与QQ号码一一对应。
 */
func (this *api_user) Get_info(access_token, openid string) (*user.Resp_get_info, error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	obj := &user.Resp_get_info{}
	err := request.HttpGetAsObj(BASE_URL+"user/get_info", param, obj)

	return obj, err
}

/**
 * 获取登录用户在QQ空间的信息，包括昵称、头像、性别及黄钻信息（包括黄钻等级、是否年费黄钻等）。此接口仅支持网站调用
 * 文档地址：http://wiki.connect.qq.com/get_user_info
 *
 * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid       用户的ID，与QQ号码一一对应。
 *                     可通过调用https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN 来获取。
 */
func (this *api_user) Get_user_info(access_token, openid string) (*user.Resp_get_user_info, error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	obj := &user.Resp_get_user_info{}
	err := request.HttpGetAsObj(BASE_URL+"user/get_user_info", param, obj)

	return obj, err
}

/**
 * 获取腾讯微博其他用户详细信息。
 * 文档地址：http://wiki.connect.qq.com/get_other_info
 *
 * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid       用户的ID，与QQ号码一一对应。
 * @param name         其他用户的账户名。可选，name和fopenid至少选一个，若同时存在则以name值为主。
 * @param fopenid      其他用户的账户名。可选，name和fopenid至少选一个，若同时存在则以name值为主。
 */
func (this *api_user) Get_other_info(access_token, openid, name, fopenids string) (*user.Resp_get_use_info, error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	param.Add("name", name)
	param.Add("fopenids", fopenids)

	obj := &user.Resp_get_use_info{}
	err := request.HttpPostAsObj(BASE_URL+"user/get_other_info", param, obj)

	return obj, err
}
